var clientes;

$(function() {
	$(".CampoEditavel").focus(function() {
		desabilitaBotoes(true, true, true, false, false, true);
	});
	
	lista();
		
	colocaMascara();
});

function pintaLinhaHover() {
	$("table > tbody > tr").hover(function() {
		$(this).toggleClass("TabelaLinhaHover");
	});
}

function colocaMascara() {
	$(".CampoCpf").mask("999.999.999-99");
}

function mostraMensagem(titulo, mensagem) {
	alert(mensagem);
}

function extraiSomenteNumeros(entrada) {
	return entrada.replace(/[^\d]+/g, '');
}

function ValidaCpf(cpf) {
	var Soma;
	var Resto;
	Soma = 0;
	
	cpf = extraiSomenteNumeros(cpf);
	
	if (cpf == "00000000000")
		return false;
	
	for (var i = 1; i <= 9; i++)
		Soma = Soma + parseInt(cpf.substring(i - 1, i)) * (11 - i);
	
	Resto = (Soma * 10) % 11;
	
	if ((Resto == 10) || (Resto == 11))
		Resto = 0;
	
	if (Resto != parseInt(cpf.substring(9, 10)))
		return false;
	
	Soma = 0;
	for (i = 1; i <= 10; i++)
		Soma = Soma + parseInt(cpf.substring(i - 1, i)) * (12 - i);
	
	Resto = (Soma * 10) % 11;
	if ((Resto == 10) || (Resto == 11))
		Resto = 0;
	
	if (Resto != parseInt(cpf.substring(10, 11)))
		return false;
	
	return true;
}

function inicializaListaClientes() {
	var itens = localStorage.getItem('clientes');
	clientes = JSON.parse(itens);
	
	if (clientes == null) {
		clientes = [];
	}
}

function gravaListaClientes() {
	localStorage.setItem('clientes', JSON.stringify(clientes));
}

function desabilitaBotoes(lista, inclui, exclui, cancela, salva, limpa) {
	$("#botaoLista").attr("disabled", lista);
	$("#botaoInclui").attr("disabled", inclui);
	$("#botaoExclui").attr("disabled", exclui);
	$("#botaoCancela").attr("disabled", cancela);
	$("#botaoSalva").attr("disabled", salva);
	$("#botaoLimpa").attr("disabled", limpa);
}

function seleciona(linha) {
	$("table > tbody > tr").removeClass("TabelaLinhaSelecionada");
	$("#linha" + linha).addClass("TabelaLinhaSelecionada");
	
	if (linha == -1) {
		return;
	}
	
	var cpf = $("#cpf" + linha);
	var nome = $("#nome" + linha);
	var endereco = $("#endereco" + linha);
	var bairro = $("#bairro" + linha);
	var cidade = $("#cidade" + linha);
	
	$("#index").val(linha);
	$("#cpf").val(cpf.html());
	$("#nome").val(nome.html());
	$("#endereco").val(endereco.html());
	$("#bairro").val(bairro.html());
	$("#cidade").val(cidade.html());
	
	cpf.focus();
	
	desabilitaBotoes(false, false, false, true, true, false);
}

function lista() {
	inicializaListaClientes();
	
	var linhas = '';
	for (var i = 0; i < clientes.length; i++) {
		var item = clientes[i];
		var cliente = JSON.parse(item);
		
		linhas += '<tr id="linha' + i + '" onClick="seleciona(' + i + ');">';
		
		linhas += '<td id="cpf' + i + '">';
		linhas += cliente.cpf;
		linhas += '</td>';
		
		linhas += '<td id="nome' + i + '">';
		linhas += cliente.nome;
		linhas += '</td>';
		
		linhas += '<td id="endereco' + i + '">';
		linhas += cliente.endereco;
		linhas += '</td>';
		
		linhas += '<td id="bairro' + i + '">';
		linhas += cliente.bairro;
		linhas += '</td>';
		
		linhas += '<td id="cidade' + i + '">';
		linhas += cliente.cidade;
		linhas += '</td>';
		
		linhas += '</tr>';
	}
	
	$('#tabela > tbody').html(linhas);
	
	if (clientes.length == 0) {
		desabilitaBotoes(false, false, true, true, true, true);
	} else {
		seleciona(0);
	}
	
	pintaLinhaHover();
}

function limpaCampos() {
	var index = $("#index");
	var cpf = $("#cpf");
	var nome = $("#nome");
	var endereco = $("#endereco");
	var bairro = $("#bairro");
	var cidade = $("#cidade");
	
	index.val(-1);
	cpf.val(null);
	nome.val(null);
	endereco.val(null);
	bairro.val(null);
	cidade.val(null);
}

function inclui() {
	 limpaCampos();
	
	cpf.focus();
}

function exclui() {
	var index = $("#index");
	
	if (index.val() == null || parseInt(index.val()) == -1) {
		mostraMensagem("Aviso", "Selecione um registro.");

		return;
	}
	
	var confirma = confirm("Confirma exclusão?");
	
	if (!confirma) {
		return;
	}
	
	clientes.splice(index.val(), 1);
	
	limpaCampos();
	
	gravaListaClientes();
	
	lista();
}

function salva() {
	var index = $("#index");
	var cpf = $("#cpf");
	var nome = $("#nome");
	var endereco = $("#endereco");
	var bairro = $("#bairro");
	var cidade = $("#cidade");
	
	if (cpf.val() == "" ||
		nome.val() == "" ||
		endereco.val() == "" ||
		bairro.val() == "" ||
		cidade.val() == "") {
		mostraMensagem("Aviso", "Todos os campos marcados com * deve ser preenchidos.");
		
		return;
	}
	
	if (!ValidaCpf(cpf.val())) {
		mostraMensagem("Aviso", "O CPF informado é inválido.");
		
		return;
	}
	
	var cliente = JSON.stringify({
		cpf: cpf.val(),
		nome: nome.val().toUpperCase(),
		endereco: endereco.val().toUpperCase(),
		bairro: bairro.val().toUpperCase(),
		cidade: cidade.val().toUpperCase()
	});
	
	inicializaListaClientes();
	
	if (parseInt(index.val()) == -1) {
		clientes.push(cliente);
	} else {
		clientes[index.val()] = cliente;
	}

	gravaListaClientes();
	
	lista();
}

function cancela() {
	lista();
}

function limpa() {
	var confirma = confirm("Deseje limpar definitivamente toda a lista?");
	
	if (confirma) {
		localStorage.clear();
		lista();
	}
}